/**
 * Description:
 * Author:    Dane
 * CreateTime:2024/10/19-上午11:01
 * Since  :   1.0
 * Version:   1.0
 */
public class myThread {
    public static void main(String[] args) {
        Example example = new Example();

        // 创建一个线程来调用 method()
        Thread waitingThread = new Thread(() -> {
            example.method();
        });

        // 创建一个线程来调用 notifyMethod()
        Thread notifyingThread = new Thread(() -> {
            try {
                // 确保 waitingThread 先执行
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            example.notifyMethod();
        });

        // 启动线程
        waitingThread.start();
        notifyingThread.start();
    }

}
class Example {
    private final Object lock = new Object();

    public void method() {
        synchronized (lock) {
            try {
                // 线程在此等待并释放锁
                lock.wait(); // 释放锁并进入等待状态
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 继续执行的代码
            System.out.println("继续执行的代码"); // 只有在获取到锁后才会执行
        } // 退出同步代码块，释放锁
    }

    public void notifyMethod() {
        synchronized (lock) {
            // 唤醒等待的线程
            lock.notify(); // 唤醒一个等待的线程
            System.out.println("唤醒");
        } // 退出同步代码块，释放锁
    }
}